package com.banyuan.lesson.内部类;

/*
* Outer 顶层类；
* 在某个类的内部类，就是内部类；
* 1、用起来方便；
* 内部类可以直接调用外部类的属性和方法；
* 外部类不可以直接使用内部类的东西；
* 成员内部类的对象必须依赖外部类的某个对象才能生存；
* 2、进行封装一些细节；
*
*
*内部类往往是外部类的一种工具，这种工具大量使用外部类的东西；
*
* 内部类可以用static修饰，这样对于外部类来说内部类的所有的字段和方法都是静态的；
*
* 静态的内部类不依赖于外部类的对象；
*
* 局部内部类
* 局部内部类使用的外部的变量必须是常量；
* */
public class Outer {
    private  int i = 10;
    public static int s = 100;
    public void outerMethod(){
        System.out.println("外部类方法");
    }

    public static void sOuterMethod(){
        //有名字的局部内部类；
        class Inner{

        }
        //匿名内部类；

    }
    private class inner{
        private int i = 20;
        //成员内部类是依赖外部类的对象而存在，但是静态是类的属性不是对象的属性，两者矛盾；
        //public static int s = 200;
        public void innerMethod(){
            //先打印内部类本身的i
            //如果向打印外部类的i（在内部类有i的情况），利用语法为：Outer.this.i;
            System.out.println(i);
            outerMethod();
        }
    }
}
